package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

func main() {
	// 启动一个goroutine 生成 100 个读书 发送到 chan1中
	ch1 := make(chan int, 50)
	ch2 := make(chan int, 100)
	wg.Add(2)

	go makeChan(ch1, 100)
	go fun2(ch1, ch2)

	wg.Wait()

	for {
		i, ok := <-ch2
		if !ok {
			break
		}
		fmt.Println(i)
	}

	// 启动一个goroutine，接收放到另一个 chan中 计算平方
}

func makeChan(ch chan int, i int) {
	defer wg.Done()
	for k := 1; k <= i; k++ {
		ch <- k
	}
	close(ch)
}
func fun2(ch1, ch2 chan int) {
	defer wg.Done()
	for {
		// 通道关闭的时候，ok会是false
		i, ok := <-ch1
		if !ok {
			break
		}
		ch2 <- i * i
	}
	close(ch2)
}

func demo() {
	// 通道必须使用make函数初始化
	//var c chan int
	//c := make(chan int)
	c := make(chan int, 16) // 带缓冲区的初始化
	defer close(c)
	fmt.Println(c)
	// 向通道内发送数据
	c <- 10
	// 向通道内接收数据
	str := <-c
	fmt.Println(str)
}
